package com.spring.utils.api_v4.dao;

import com.spring.utils.api_v4.pojo.DeptInfo;
import com.spring.utils.api_v4.pojo.UserInfo;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Optional;

@Repository
@CacheConfig(cacheNames = "my_cache")
public interface IUserDao extends JpaRepository<UserInfo, String> {

    /**
     * 根据编号获取账户信息
     * @param id
     * @return
     */
    Optional<UserInfo> findById(String id);

    /**
     * 根据账户获取账户
     * @param username
     * @return
     */
    UserInfo findByName(String username);

    /**
     * 根据电话获取用户
     * @param phone
     * @return
     */
    Optional<UserInfo> findByPhone(String phone);

    /**
     * 判断身份证号码是否存在
     * @param idCard
     * @return
     */
    boolean existsByIdCard(String idCard);

    /**
     * 获取部门员工信息
     * @param dept
     * @return
     */
    List<UserInfo> findAllByDepart(DeptInfo dept);

    /**
     * 统计部门员工数量
     * @param dept
     * @return
     */
    int countByDepart(DeptInfo dept);

    /**
     * 删除部门所有用户
     * @param dept
     */
    void deleteAllByDepart(DeptInfo dept);

    /**
     * 根据身份证和电话查询
     * @param idCard
     * @param phone
     * @return
     */
    UserInfo findByIdCardOrPhone(String idCard, String phone);

    /**
     * 根据身份查询用户人数
     * @param dept
     * @param role
     * @return
     */
    int countByDepartAndRawRole(DeptInfo dept, String role);
}
